const express=require('express')  //导入
const app=express()  //创建服务器实例对象
const joi=require('joi') //验证规则包
const {expressjwt}=require('express-jwt') //导入解析token包
const config=require('./config')
// 配置跨域中间件cors
const cors=require('cors')
app.use(cors())

// 配置解析表单数据的内置中间件 
// 这个中间件只能解析application/x-www-form-urlencoded格式的表单数据
app.use(express.urlencoded({extended:false}))

// 解析token
app.use(expressjwt({secret:config.jwtKey, algorithms: ["HS256"] }).unless({
    // path: ['/login']  // 指定路径不经过 Token 解析
    path: [/^\/api\//]  // 指定路径不经过 Token 解析
  }))

// 导入路由
const useRouter=require('./routes/user')
app.use('/api',useRouter)

// 错误级别中间件
app.use((err,req,res,next)=>{
    console.log('错误123',err.name);
    
    // 验证错误
    if(err instanceof joi.ValidationError)return  res.send({status:401,message:err.message})
    // 身份错误
    if(err.name == 'UnauthorizedError') return res.send({status:401,message:'无效token'})
    // 未知错误
     res.send(err)
})

// 启动服务器
app.listen(3000,()=>{
    console.log('app server run at http://127.0.0.1:3000'); 
})